setwd("C:/Users/Fathan/Documents/Obsidian Vault/2. Kuliah/Smt 7 & 8/Visdat-25/Prak 02")

Data

Import Data

Data Susenas Provinsi Jawa Barat tahun 2020

susenas <- read.csv("Data/Susenas Jawa Barat 2020.csv", sep = ";")
head(susenas)
##   Status_Rawan   Pendidikan_KRT KRT_Rawan Jumlah_Penabung Jumlah_Buta_Huruf
## 1  Tidak_Rawan               SD     Tidak               2                 0
## 2  Tidak_Rawan Perguruan Tinggi     Tidak               3                 0
## 3        Rawan Perguruan Tinggi     Tidak               3                 0
## 4  Tidak_Rawan              SMP     Tidak               0                 1
## 5  Tidak_Rawan               SD     Tidak               0                 0
## 6        Rawan              SMP     Tidak               1                 0
##   Penerima_Transfer Aset_Tanah Akses_Internet Sakit_Namun_Tidak_Rawat_Jalan
## 1             Tidak         Ya             Ya                         Tidak
## 2             Tidak         Ya             Ya                         Tidak
## 3             Tidak         Ya             Ya                         Tidak
## 4             Tidak         Ya          Tidak                         Tidak
## 5             Tidak         Ya          Tidak                         Tidak
## 6             Tidak      Tidak             Ya                         Tidak
##     PKH   KKS  BPNT Bantuan_Pemda  BPJS Jamkesda KIP_PIP Jenis_Atap
## 1 Tidak Tidak Tidak         Tidak Tidak    Tidak   Tidak    Genteng
## 2 Tidak Tidak Tidak         Tidak Tidak    Tidak   Tidak    Genteng
## 3 Tidak Tidak Tidak         Tidak Tidak    Tidak   Tidak      Asbes
## 4 Tidak Tidak Tidak         Tidak    Ya    Tidak   Tidak      Asbes
## 5 Tidak Tidak Tidak         Tidak Tidak    Tidak   Tidak    Genteng
## 6 Tidak Tidak Tidak         Tidak Tidak    Tidak   Tidak      Asbes
##     Jenis_Lantai            Jenis_Dinding Luas_Lantai Listrik Bahan_Bakar_Masak
## 1 Marmer/Keramik Tembok/Plesteran/anyaman          60 Listrik           LPG 3Kg
## 2 Marmer/Keramik Tembok/Plesteran/anyaman         170 Listrik           LPG 3Kg
## 3 Marmer/Keramik Tembok/Plesteran/anyaman          60 Listrik           LPG 3Kg
## 4        Lainnya               Kayu/Papan          48 Listrik           LPG 3Kg
## 5 Marmer/Keramik Tembok/Plesteran/anyaman          54 Listrik           LPG 3Kg
## 6        Lainnya Tembok/Plesteran/anyaman          54 Listrik           LPG 3Kg
##        Sumber_Air_Minum Air_Minum_Layak Sanitasi_Layak KabKota
## 1               Lainnya           Tidak             Ya       1
## 2 Air kemasan/isi Ulang           Tidak             Ya       1
## 3 Air kemasan/isi Ulang           Tidak             Ya       1
## 4 Air kemasan/isi Ulang           Tidak          Tidak       1
## 5               Lainnya           Tidak          Tidak       1
## 6 Air kemasan/isi Ulang           Tidak             Ya       1
namakabupaten <- read.csv("Data/nama kabupaten.csv",sep = ",")
head(namakabupaten)
##   nama_prov value_prov variable_kab      nama_kab value_kab kab
## 1      ACEH         11         R102      SIMEULUE      1101   1
## 2      ACEH         11         R102  ACEH SINGKIL      1102   2
## 3      ACEH         11         R102  ACEH SELATAN      1103   3
## 4      ACEH         11         R102 ACEH TENGGARA      1104   4
## 5      ACEH         11         R102    ACEH TIMUR      1105   5
## 6      ACEH         11         R102   ACEH TENGAH      1106   6

Data Preprocessing

datakab <- namakabupaten[
  namakabupaten$nama_prov == "JAWA BARAT", 
  c("nama_kab", "kab")
]
colnames(datakab) <- c("Nama Kabupaten", "KabKota")

data <- merge(susenas, datakab, by="KabKota")
head(data)
##   KabKota Status_Rawan   Pendidikan_KRT KRT_Rawan Jumlah_Penabung
## 1       1  Tidak_Rawan               SD     Tidak               2
## 2       1  Tidak_Rawan Perguruan Tinggi     Tidak               3
## 3       1        Rawan Perguruan Tinggi     Tidak               3
## 4       1  Tidak_Rawan              SMP     Tidak               0
## 5       1  Tidak_Rawan               SD     Tidak               0
## 6       1        Rawan              SMP     Tidak               1
##   Jumlah_Buta_Huruf Penerima_Transfer Aset_Tanah Akses_Internet
## 1                 0             Tidak         Ya             Ya
## 2                 0             Tidak         Ya             Ya
## 3                 0             Tidak         Ya             Ya
## 4                 1             Tidak         Ya          Tidak
## 5                 0             Tidak         Ya          Tidak
## 6                 0             Tidak      Tidak             Ya
##   Sakit_Namun_Tidak_Rawat_Jalan   PKH   KKS  BPNT Bantuan_Pemda  BPJS Jamkesda
## 1                         Tidak Tidak Tidak Tidak         Tidak Tidak    Tidak
## 2                         Tidak Tidak Tidak Tidak         Tidak Tidak    Tidak
## 3                         Tidak Tidak Tidak Tidak         Tidak Tidak    Tidak
## 4                         Tidak Tidak Tidak Tidak         Tidak    Ya    Tidak
## 5                         Tidak Tidak Tidak Tidak         Tidak Tidak    Tidak
## 6                         Tidak Tidak Tidak Tidak         Tidak Tidak    Tidak
##   KIP_PIP Jenis_Atap   Jenis_Lantai            Jenis_Dinding Luas_Lantai
## 1   Tidak    Genteng Marmer/Keramik Tembok/Plesteran/anyaman          60
## 2   Tidak    Genteng Marmer/Keramik Tembok/Plesteran/anyaman         170
## 3   Tidak      Asbes Marmer/Keramik Tembok/Plesteran/anyaman          60
## 4   Tidak      Asbes        Lainnya               Kayu/Papan          48
## 5   Tidak    Genteng Marmer/Keramik Tembok/Plesteran/anyaman          54
## 6   Tidak      Asbes        Lainnya Tembok/Plesteran/anyaman          54
##   Listrik Bahan_Bakar_Masak      Sumber_Air_Minum Air_Minum_Layak
## 1 Listrik           LPG 3Kg               Lainnya           Tidak
## 2 Listrik           LPG 3Kg Air kemasan/isi Ulang           Tidak
## 3 Listrik           LPG 3Kg Air kemasan/isi Ulang           Tidak
## 4 Listrik           LPG 3Kg Air kemasan/isi Ulang           Tidak
## 5 Listrik           LPG 3Kg               Lainnya           Tidak
## 6 Listrik           LPG 3Kg Air kemasan/isi Ulang           Tidak
##   Sanitasi_Layak Nama Kabupaten
## 1             Ya          BOGOR
## 2             Ya          BOGOR
## 3             Ya          BOGOR
## 4          Tidak          BOGOR
## 5          Tidak          BOGOR
## 6             Ya          BOGOR

Data Quality Checking

sum(is.na(data))
## [1] 0
str(data)
## 'data.frame':    24769 obs. of  27 variables:
##  $ KabKota                      : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ Status_Rawan                 : chr  "Tidak_Rawan" "Tidak_Rawan" "Rawan" "Tidak_Rawan" ...
##  $ Pendidikan_KRT               : chr  "SD" "Perguruan Tinggi" "Perguruan Tinggi" "SMP" ...
##  $ KRT_Rawan                    : chr  "Tidak" "Tidak" "Tidak" "Tidak" ...
##  $ Jumlah_Penabung              : int  2 3 3 0 0 1 3 2 1 4 ...
##  $ Jumlah_Buta_Huruf            : int  0 0 0 1 0 0 0 0 0 0 ...
##  $ Penerima_Transfer            : chr  "Tidak" "Tidak" "Tidak" "Tidak" ...
##  $ Aset_Tanah                   : chr  "Ya" "Ya" "Ya" "Ya" ...
##  $ Akses_Internet               : chr  "Ya" "Ya" "Ya" "Tidak" ...
##  $ Sakit_Namun_Tidak_Rawat_Jalan: chr  "Tidak" "Tidak" "Tidak" "Tidak" ...
##  $ PKH                          : chr  "Tidak" "Tidak" "Tidak" "Tidak" ...
##  $ KKS                          : chr  "Tidak" "Tidak" "Tidak" "Tidak" ...
##  $ BPNT                         : chr  "Tidak" "Tidak" "Tidak" "Tidak" ...
##  $ Bantuan_Pemda                : chr  "Tidak" "Tidak" "Tidak" "Tidak" ...
##  $ BPJS                         : chr  "Tidak" "Tidak" "Tidak" "Ya" ...
##  $ Jamkesda                     : chr  "Tidak" "Tidak" "Tidak" "Tidak" ...
##  $ KIP_PIP                      : chr  "Tidak" "Tidak" "Tidak" "Tidak" ...
##  $ Jenis_Atap                   : chr  "Genteng" "Genteng" "Asbes" "Asbes" ...
##  $ Jenis_Lantai                 : chr  "Marmer/Keramik" "Marmer/Keramik" "Marmer/Keramik" "Lainnya" ...
##  $ Jenis_Dinding                : chr  "Tembok/Plesteran/anyaman" "Tembok/Plesteran/anyaman" "Tembok/Plesteran/anyaman" "Kayu/Papan" ...
##  $ Luas_Lantai                  : int  60 170 60 48 54 54 72 60 73 70 ...
##  $ Listrik                      : chr  "Listrik" "Listrik" "Listrik" "Listrik" ...
##  $ Bahan_Bakar_Masak            : chr  "LPG 3Kg" "LPG 3Kg" "LPG 3Kg" "LPG 3Kg" ...
##  $ Sumber_Air_Minum             : chr  "Lainnya" "Air kemasan/isi Ulang" "Air kemasan/isi Ulang" "Air kemasan/isi Ulang" ...
##  $ Air_Minum_Layak              : chr  "Tidak" "Tidak" "Tidak" "Tidak" ...
##  $ Sanitasi_Layak               : chr  "Ya" "Ya" "Ya" "Tidak" ...
##  $ Nama Kabupaten               : chr  "BOGOR" "BOGOR" "BOGOR" "BOGOR" ...
table(data[data$`Nama Kabupaten` == "BANDUNG", ]$KabKota)
## 
##    4   73 
## 1153 1013

Bar Chart

Sederhana

ggplot(data, aes(Status_Rawan)) + 
  geom_bar()

Dengan Warna default

ggplot(data, aes(Status_Rawan, fill=Status_Rawan)) + 
  geom_bar()

Warna Viridis

ggplot(data, aes(Status_Rawan, fill=Status_Rawan)) + 
  geom_bar() + 
  scale_fill_viridis(discrete = T)

Warna manual

ggplot(data, aes(Status_Rawan, fill=Status_Rawan)) + 
  geom_bar() + 
  scale_fill_manual(values = c("#FF6961", "#8CD47E"))

Banyak Kategori

ggplot(data, aes(`Nama Kabupaten`, fill=`Nama Kabupaten`)) + 
  geom_bar() + 
  scale_fill_viridis(discrete = T)

Ubah angle text

ggplot(data, aes(`Nama Kabupaten`, fill=`Nama Kabupaten`)) + 
  geom_bar() + 
  scale_fill_viridis(discrete = T) + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))

ggplot(data, aes(`Nama Kabupaten`, fill=`Nama Kabupaten`)) + 
  geom_bar() + 
  scale_fill_viridis(discrete = T) + 
  theme(axis.text.x = element_text(angle = 75, vjust = 1, hjust = 1))

Hapus legend

ggplot(data, aes(`Nama Kabupaten`, fill=`Nama Kabupaten`)) + 
  geom_bar() + 
  scale_fill_viridis(discrete = T) + 
  theme(axis.text.x = element_text(angle = 75, vjust = 1, hjust = 1), 
        legend.position = "none") + ylab("Frekuensi")

Rotasi Barchart

ggplot(data, aes(y = `Nama Kabupaten`, fill=`Nama Kabupaten`)) + 
  geom_bar() + 
  scale_fill_viridis(discrete = T) + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1), 
        legend.position = "none") + 
  xlab("Frekuensi")

ggplot(data, aes(`Nama Kabupaten`, fill=`Nama Kabupaten`)) + 
  geom_bar() + 
  scale_fill_viridis(discrete = T) + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1), 
        legend.position = "none") + 
  ylab("Frekuensi") + 
  coord_flip() + 
  ggtitle("Diagram Batang Kabupaten")

Grouped Bar Chart

ggplot(data, aes(x=`Nama Kabupaten`, fill=Status_Rawan)) + 
  geom_bar(position="dodge")

Stacked Barchart

ggplot(data, aes(x=`Nama Kabupaten`, fill=Status_Rawan)) + 
  geom_bar(position="stack")

Stacked Barchart 100%

ggplot(data, aes(x=`Nama Kabupaten`, fill=Status_Rawan)) + 
  geom_bar(position="fill")

percentDatadaerah <- data %>% 
  group_by(`Nama Kabupaten`) %>% 
  count(Status_Rawan) %>% 
  mutate(ratio=scales::percent(n/sum(n)))

head(percentDatadaerah)
## # A tibble: 6 × 4
## # Groups:   Nama Kabupaten [3]
##   `Nama Kabupaten` Status_Rawan     n ratio
##   <chr>            <chr>        <int> <chr>
## 1 BANDUNG          Rawan          502 23%  
## 2 BANDUNG          Tidak_Rawan   1664 77%  
## 3 BANDUNG BARAT    Rawan          271 28%  
## 4 BANDUNG BARAT    Tidak_Rawan    683 72%  
## 5 BANJAR           Rawan           44 8%   
## 6 BANJAR           Tidak_Rawan    525 92%
ggplot(data, aes(x=`Nama Kabupaten`, fill=Status_Rawan)) + 
  geom_bar(position="fill") + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)) + 
  coord_flip() +
  geom_text(data=percentDatadaerah, aes(y=n, label=ratio),
            color="white", position=position_fill(vjust=0.5), size = 3.5)

Lollipop Chart

percentDatadaerah_rawan <- percentDatadaerah %>%
  filter(Status_Rawan == "Rawan") %>%
  as.data.frame()
head(percentDatadaerah_rawan)
##   Nama Kabupaten Status_Rawan   n ratio
## 1        BANDUNG        Rawan 502   23%
## 2  BANDUNG BARAT        Rawan 271   28%
## 3         BANJAR        Rawan  44    8%
## 4         BEKASI        Rawan 296   14%
## 5          BOGOR        Rawan 382   20%
## 6         CIAMIS        Rawan 291   28%
ggplot(percentDatadaerah_rawan, aes(x=`Nama Kabupaten`, y=n)) + 
  geom_segment(aes(x=`Nama Kabupaten`, xend=`Nama Kabupaten`, y=0, yend=n)) +
  geom_point() + coord_flip()

ggplot(percentDatadaerah_rawan, aes(x = `Nama Kabupaten`, y = n)) + geom_segment(aes(x = `Nama Kabupaten`, xend = `Nama Kabupaten`, y = 0, yend = n)) + geom_point() + coord_flip() + geom_point(size = 4, pch = 21, bg = 5, col = 6)

ggplot(percentDatadaerah_rawan, aes(x = `Nama Kabupaten`, y = n)) + geom_segment(aes(x = `Nama Kabupaten`, xend = `Nama Kabupaten`, y = 0, yend = n), color="grey", lwd=1.5) + geom_point() + coord_flip() + geom_point(size = 5, pch = 21, bg = 6, col = 1) + theme_classic()

ggplot(percentDatadaerah_rawan, aes(x = `Nama Kabupaten`, y = n)) + geom_segment(aes(x = `Nama Kabupaten`, xend = `Nama Kabupaten`, y = 0, yend = n), color="grey", lwd=1.5) + geom_point() + coord_flip() + geom_point(size = 5, pch = 21, bg = 6, col = 1) + theme_classic()

ggplot(percentDatadaerah_rawan, aes(x = `Nama Kabupaten`, y = n)) + geom_segment(aes(x = `Nama Kabupaten`, xend = `Nama Kabupaten`, y = 0, yend = n), color="grey", lwd=1.5) + geom_point() + coord_flip() + geom_point(size = 5, pch = 21, bg = 6, col = 1) + geom_text(aes(label = n), color = "white", size = 2) + theme_classic() 

x = reorder(percentDatadaerah_rawan$`Nama Kabupaten`, percentDatadaerah_rawan$n)
x
##  [1] BANDUNG       BANDUNG BARAT BANJAR        BEKASI        BOGOR        
##  [6] CIAMIS        CIANJUR       CIMAHI        CIREBON       DEPOK        
## [11] GARUT         INDRAMAYU     KARAWANG      KUNINGAN      MAJALENGKA   
## [16] PANGANDARAN   PURWAKARTA    SUBANG        SUKABUMI      SUMEDANG     
## [21] TASIKMALAYA  
## attr(,"scores")
##       BANDUNG BANDUNG BARAT        BANJAR        BEKASI         BOGOR 
##           502           271            44           296           382 
##        CIAMIS       CIANJUR        CIMAHI       CIREBON         DEPOK 
##           291           268           153           477           111 
##         GARUT     INDRAMAYU      KARAWANG      KUNINGAN    MAJALENGKA 
##           275           263           164           191           178 
##   PANGANDARAN    PURWAKARTA        SUBANG      SUKABUMI      SUMEDANG 
##           171           172           201           446           200 
##   TASIKMALAYA 
##           295 
## 21 Levels: BANJAR DEPOK CIMAHI KARAWANG PANGANDARAN PURWAKARTA ... BANDUNG
ggplot(percentDatadaerah_rawan, aes(x = reorder(`Nama Kabupaten`, n), y = n)) + geom_segment(aes(xend = `Nama Kabupaten`, y = 0, yend = n), color="grey", lwd=1.5) + geom_point() + coord_flip() + geom_point(size = 5, pch = 21, bg = 6, col = 1) + geom_text(aes(label = n), color = "white", size = 2) + theme_classic()